//
//  ViewController.m
//  AdressBook
//
//  Created by 谭启宏 on 16/1/20.
//  Copyright © 2016年 谭启宏. All rights reserved.
//

#import "ViewController.h"
#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>
@interface ViewController ()<CNContactPickerDelegate>

@end

@implementation ViewController


#pragma mark - CNContactPickerDelegate

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"联系人的测试";
    self.view.backgroundColor = [UIColor whiteColor];
    [self contactsTest];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)contactsTest {
    //1、联系人对象：CNContact
    
    //CNContact 这个对象是用来配置联系人信息的，有可变的CNMutaleContact和CNContact，区别用来读取和创建联系人。CNContact对象中有许多属性，对应联系人的一些信息。
    CNMutableContact *contact = [[CNMutableContact alloc]init];
    //设置联系人头像
    contact.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"icon.png"]);
    //设置联系人姓名
    contact.givenName = @"qihong";//名字
    contact.familyName = @"tan";//姓氏
    //设置联系人邮箱
    CNLabeledValue *homeEmail = [CNLabeledValue labeledValueWithLabel:CNLabelHome value:@"917034405@qq.com"];
    CNLabeledValue *workEmail =[CNLabeledValue labeledValueWithLabel:CNLabelWork value:@"917034405@qq.com"];
    //CNLabeledValue对象主要用于创建一些联系人属性的键值对应，通过这些对应，系统会帮我们进行数据的格式化，例如CNLabelHome，就会将号码格式成家庭邮箱的格式
    contact.emailAddresses = @[homeEmail,workEmail];
    
    //电话和邮箱的配置类似
    contact.phoneNumbers = @[[CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberiPhone value:[CNPhoneNumber phoneNumberWithStringValue:@"12344312321"]]];
    
    //设置联系人地址
    CNMutablePostalAddress * homeAdress = [[CNMutablePostalAddress alloc]init];
    homeAdress.street = @"贝克街";
    homeAdress.city = @"伦敦";
    homeAdress.state = @"英国";
    homeAdress.postalCode = @"221B";
    contact.postalAddresses = @[[CNLabeledValue labeledValueWithLabel:CNLabelHome value:homeAdress]];
    
    //设置生日
    NSDateComponents * birthday = [[NSDateComponents  alloc]init];
    birthday.day=7;
    birthday.month=5;
    birthday.year=1992;
    contact.birthday=birthday;
    
    //2、创建添加联系人请求：CNSaveRequest
    //CNSaveRequest是用于存储联系人的请求类，通过这个类，我们可以创建批量添加、修改或者删除联系人的请求
    
    CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];
    //添加联系人
    [saveRequest addContact:contact toContainerWithIdentifier:nil];
    
    //3、进行联系人的写入操作:CNContactStore
    CNContactStore * store = [[CNContactStore alloc]init];
    [store executeSaveRequest:saveRequest error:nil];
    
    //三、获取格式化的联系人信息
    
    NSString * foematter =[CNContactFormatter stringFromContact:contact style:CNContactFormatterStyleFullName];
    NSLog(@"%@",foematter);
    
    NSString * foematter1 =[CNPostalAddressFormatter stringFromPostalAddress:homeAdress style:CNPostalAddressFormatterStyleMailingAddress];
    NSLog(@"%@",foematter1);
    
    //四、提取联系人
    CNContactStore * stroe = [[CNContactStore alloc]init];
    //检索条件，检索所有名字中有zhang的联系人
    NSPredicate * predicate = [CNContact predicateForContactsMatchingName:@"tan"];
    //提取数据
    NSArray * contacts = [stroe unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey] error:nil];
    NSLog(@"%@",contacts);
}

@end


#pragma mark - CNSaveRequest 是用于存储联系人的请求类，通过这个类，我们可以创建批量添加、修改或者删除联系人的请求

////添加一个联系人
//- (void)addContact:(CNMutableContact *)contact toContainerWithIdentifier:(nullable NSString *)identifier;
////更新一个联系人
//- (void)updateContact:(CNMutableContact *)contact;
////删除一个联系人
//- (void)deleteContact:(CNMutableContact *)contact;
////添加一组联系人
//- (void)addGroup:(CNMutableGroup *)group toContainerWithIdentifier:(nullable NSString *)identifier;
////更新一组联系人
//- (void)updateGroup:(CNMutableGroup *)group;
////删除一组联系人
//- (void)deleteGroup:(CNMutableGroup *)group;
////向组中添加子组
//- (void)addSubgroup:(CNGroup *)subgroup toGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
////在组中删除子组
//- (void)removeSubgroup:(CNGroup *)subgroup fromGroup:(CNGroup *)group NS_AVAILABLE(10_11, NA);
////向组中添加成员
//- (void)addMember:(CNContact *)contact toGroup:(CNGroup *)group;
////向组中移除成员


